package com.yuandian.management.vo.flow.alarm;


import com.yuandian.api.management.entity.*;
import com.yuandian.bpm.admin.api.entity.SysDictItem;
import lombok.Data;

import java.util.*;

/**
 * @author lijunhang
 * @date 2023年06月05日 10:58
 * @description 告警配置集合类
 */
@Data
public class AlarmConfigEntity {
	/**
	 * 告警对象配置
	 * 1    WEB
	 * 2    MID
	 * 3    DB
	 * 4    步骤
	 */

	private  Map<Integer, String> alarmObjectConfig = new HashMap<>();

	/**
	 * 告警级别配置
	 * 1    提示
	 * 2    一般
	 * 3    紧急
	 * 4    重大
	 * 999  正常
	 */

	private  Map<Integer, String> alarmLevelConfig = new HashMap<>();

	/**
	 * 业务配置
	 * <业务id, 业务对象>
	 */

	private  Map<Integer, ConfBusiness> businessConfig = new HashMap<>();

	/**
	 * 步骤配置
	 * <步骤id, 步骤对象>
	 */

	private  Map<Integer, ConfStep> processConfig = new HashMap<>();

	/**
	 * 告警指标配置
	 * <指标id, 告警指标对象>
	 */

	private  Map<Integer, ConfAlarmIndicators> alarmIndicatorConfig = new HashMap<>();

	/**
	 * 告警指标编码配置
	 * <告警指标编码id, 告警指标编码对象>
	 */

	private  Map<Integer, ConfAlarmIndicatorCode> alarmIndicatorCodeConfig = new HashMap<>();

	/**
	 * 告警指标单位配置
	 * <告警指标单位id, 告警指标单位对象>
	 */

	private  Map<Integer, String> alarmIndicatorUnitConfig = new HashMap<>();

	/**
	 * 告警主体配置列表
	 */

	private  List<ConfAlarm> alarmMainList;

	/**
	 * 告警模板配置
	 */

	private  Map<Integer, ConfAlarmTemplate> alarmTemplateConfig = new HashMap<>();

	/**
	 * 告警阈值配置
	 * <告警id, 告警阈值列表>
	 */

	private  Map<Integer, List<ConfAlarmThreshold>> alarmThresholdConfig = new HashMap<>();

	/**
	 * 告警维度配置
	 * <告警id, <维度, 数据id>>
	 */

	private  Map<Integer, Map<String, List<Integer>>> alarmDimensionConfig = new HashMap<>();

	/**
	 * 告警配置，由上述配置组装而来
	 * <告警指标id, <告警对象id, <告警维度, 告警信息对象>>>
	 */

	private  Map<Integer, Map<Integer, Map<String, AlarmInfo>>> alarmInfoConfig = new HashMap<>();

	/** 有效的自定义指标 */

	private  List<ConfAlarmIndicators> customIndicatorList = new ArrayList<>();


	/** 自定义指标Map集合,<颗粒度Id@指标对象Id, 对应的指标集合> */

	private  Map<String, List<ConfAlarmIndicators>> customIndicatorMap = new HashMap<>();

	/** 业务告警指标配置 */

	private  List<ConfAlarmIndicators> busiStatusIndicatorList = new ArrayList<>();

	/** 所有告警指标List集合 */

	private  List<ConfAlarmIndicators> alarmIndicatorList = new ArrayList<>();

	/** 告警配置Map集合,<指标Id,<List<CustomAlarmConfig>>> */

	private  Map<String, List<ConfAlarm>> alarmConfigMap = new HashMap<>();

	/** 有效告警配置List集合 */

	private  List<ConfAlarm> validAlarmConfigList = new ArrayList<>();

	/** 所有告警配置List集合 */

	private  List<ConfAlarm> alarmConfigList = new ArrayList<>();

	/** 告警维度Map集合,Map<告警ID, Map<维度类型Id, 维度集合>> */

	private  Map<String, Map<String, List<ConfAlarmDimension>>> alarmsDimensionMap = new HashMap<>();


	/** 告警阀值Map集合,<告警配置Id,List<CustomAlarmThreshold>> */

	private  Map<String, List<ConfAlarmThreshold>> alarmThresholdMap = new HashMap<>();

	/** 业务告警指标名称 */

	private  String busiStatusAlarmIndicatorName = "BS_FAIL_RATE_10|BS_FAIL_RATE_20|BS_FAIL_RATE_30|";

	/** 告警维度List集合 */

	private  List<ConfAlarmDimension> alarmsDimensionList = new ArrayList<>();

	/** 告警阀值List集合 */

	private  List<ConfAlarmThreshold> alarmThresholdList = new ArrayList<>();


	/** 字典Map集合,<字典类型@字典key, 字典> */

	private  Map<String, SysDictItem> sysDictDataMap = new HashMap<>();

	/** 运维工作台 记录组装（高频、低频。。）配置的组装日期 */
	private  String configDate = "";

	/** 运维工作台 记录业务前五工作日访问类型 Map<业务编码，业务访问频率类型(高频、低频。。。)>  */
	//  private  Map<String, OpsBusinessVisitType> businessVisitFrequencyType = new HashMap<>();

	/** 运维工作台 记录共用接口业务服务资源（t_single_resource_it_relationship表 after_business_resource_coding > 2的资源）  */
	private  Set<String>  publicResourceCodeSet = new HashSet<>();

	/** 运维工作台 定义 '高频业务' 的最低阈值  "sys.ops.highValue" */
	private  int highValue = 30;
	/** 运维工作台 定义 '经常业务' 的最低阈值  "sys.ops.oftenValue" */
	private  int oftenValue = 5;
	/** 运维工作台 定义 '低频业务' 的最低阈值  "sys.ops.lowValue" */
	private  int lowValue = 1;

	/** 运维工作台 高频失败业务的告警推送逻辑，定义单个告警周期的失败访问量达到该阈值才推送 "sys.ops.highFailAlarmValue" */
	private  int highFailAlarmValue = 10;
}
